/**
 *	5.修改前一题的Eratosthenes程序，使用位的数组而不是字符数组，这里要用到第5章编程练习中所开发的位数组函数。
 *	这个修改使程序的空间效率进一步提高，不过代价是时间效率降低，在你的系统中，使用这个方法，你所能找到的最大质数是多少？
**/

#include "./include/bitarray.h"
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

#define MAX_VALUE	10000
#define MAX_BIT_NUMBER	((MAX_VALUE - 3) / 2)
#define SIZE		(MAX_BIT_NUMBER / CHAR_BIT + 1)

int main()
{
	char sieve[SIZE];
	int number;
	int bit_number;
	char *sp;

	for(sp = sieve; sp < &sieve[SIZE];)
		*sp++ = 0xff;

	for(number = 3; number < MAX_VALUE; number += 2)
	{
		bit_number = (number - 3) / 2;
		if(test_bit(sieve, bit_number) == 0)
			continue;
		while((bit_number += number) <= MAX_BIT_NUMBER)
		{
			clear_bit(sieve, bit_number);
		}
	}

	printf("2\n");
	for(bit_number = 0, number = 3; number <= MAX_VALUE; bit_number += 1, number += 2)
		if(test_bit(sieve, bit_number))
			printf("%d\n", number);
	return 0;
}

